{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python for Finance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Analyze Big Financial Data**\n",
    "\n",
    "O'Reilly (2014)\n",
    "\n",
    "Yves Hilpisch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img style=\"border:0px solid grey;\" src=\"http://hilpisch.com/python_for_finance.png\" alt=\"Python for Finance\" width=\"30%\" align=\"left\" border=\"0\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Buy the book ** |\n",
    "<a href='http://shop.oreilly.com/product/0636920032441.do' target='_blank'>O'Reilly</a> |\n",
    "<a href='http://www.amazon.com/Yves-Hilpisch/e/B00JCYHHJM' target='_blank'>Amazon</a>\n",
    "\n",
    "**All book codes & IPYNBs** |\n",
    "<a href=\"http://oreilly.quant-platform.com\">http://oreilly.quant-platform.com</a>\n",
    "\n",
    "**The Python Quants GmbH** | <a href='http://tpq.io' target='_blank'>http://tpq.io</a>\n",
    "\n",
    "**Contact us** | <a href='mailto:pff@tpq.io'>pff@tpq.io</a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Object Orientation and Graphical User Interfaces"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylab import plt\n",
    "plt.style.use('ggplot')\n",
    "import matplotlib as mpl\n",
    "mpl.rcParams['font.family'] = 'serif'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Object Orientation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Basics of Python Classes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "uuid": "1ce92033-098b-4e27-9d87-8e2666ec5cea"
   },
   "outputs": [],
   "source": [
    "class ExampleOne(object):\n",
    "    pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "uuid": "b456addd-be22-4c83-8540-83e23537a955"
   },
   "outputs": [],
   "source": [
    "c = ExampleOne()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "uuid": "5b6cf9da-239e-43ae-b08b-a68ce7fa1866"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'<__main__.ExampleOne object at 0x102a99b38>'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.__str__()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "uuid": "61841014-fc42-4e7b-af9b-7c00726e30f0"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "__main__.ExampleOne"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(c)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "uuid": "02b764ef-2c2e-4b16-a172-3abe15bfe608"
   },
   "outputs": [],
   "source": [
    "class ExampleTwo(object):\n",
    "    def __init__(self, a, b):\n",
    "        self.a = a\n",
    "        self.b = b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "uuid": "1697f007-4187-458b-9cca-86996f72c187"
   },
   "outputs": [],
   "source": [
    "c = ExampleTwo(1, 'text')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "uuid": "66a76e9c-3dce-4fa4-a02f-045e18230ce9"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "uuid": "bdef0545-bdbe-4205-94e8-ff4d8d25da8e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'text'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "uuid": "5e53f978-44c5-48bb-82c8-488e744ee714"
   },
   "outputs": [],
   "source": [
    "c.a = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "uuid": "2886b794-29e2-4650-afff-cb4528f1837b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "uuid": "97cd1970-5234-45ea-a03f-0c2e82713d42"
   },
   "outputs": [],
   "source": [
    "c = ExampleOne()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "uuid": "8fa2b86a-8182-4689-80b1-a9ddb8aaabeb"
   },
   "outputs": [],
   "source": [
    "c.first_name = 'Jason'\n",
    "c.last_name = 'Bourne'\n",
    "c.movies = 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "uuid": "01aaaa84-30eb-4aa1-91f1-45da021090d3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Jason Bourne 4\n"
     ]
    }
   ],
   "source": [
    "print(c.first_name, c.last_name, c.movies)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "uuid": "8bab6ecc-0164-4cab-99cc-6dd085c6573a"
   },
   "outputs": [],
   "source": [
    "class ExampleThree(object):\n",
    "    def __init__(self, a, b):\n",
    "        self.a = a\n",
    "        self.b = b\n",
    "    def addition(self):\n",
    "        return self.a + self.b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "uuid": "e1972182-b358-43e0-aa65-5edcb5ff22d2"
   },
   "outputs": [],
   "source": [
    "c = ExampleThree(10, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "uuid": "d5108fab-7b72-4c84-8d35-e8f10532bcfd"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "uuid": "ce192d08-30fd-49fa-9332-f7c12b3041fb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "35"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.a += 10\n",
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "uuid": "e7be5636-de6c-445f-ad25-7f0bccfcb848"
   },
   "outputs": [],
   "source": [
    "class ExampleFour(ExampleTwo):\n",
    "    def addition(self):\n",
    "        return self.a + self.b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "uuid": "174ae69d-a1c4-4181-9be6-76246b171787"
   },
   "outputs": [],
   "source": [
    "c = ExampleFour(10, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "uuid": "921600a6-6068-473f-9a6f-91df0d5ae8b2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "uuid": "a433da66-70d6-4e55-a16f-cb5ceabbc795"
   },
   "outputs": [],
   "source": [
    "class ExampleFive(ExampleFour):\n",
    "    def multiplication(self):\n",
    "        return self.a * self.b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "uuid": "55e4676e-552d-4c91-98ac-bcda1f1661bd"
   },
   "outputs": [],
   "source": [
    "c = ExampleFive(10, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "uuid": "a00a11b9-64cb-4b84-937f-d4a08e55a866"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "uuid": "602e2b76-9282-41fb-a2ae-f5e8f8700542"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "150"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.multiplication()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "uuid": "7e0ec289-2e12-422e-a6e8-928467ced561"
   },
   "outputs": [],
   "source": [
    "def multiplication(self):\n",
    "        return self.a * self.b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "uuid": "eef676a7-1aa2-48bb-8df1-faa0d6e376c2"
   },
   "outputs": [],
   "source": [
    "class ExampleSix(ExampleFour):\n",
    "    multiplication = multiplication"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "uuid": "b6914c5b-ef2c-4e89-8658-945230a0d8d1"
   },
   "outputs": [],
   "source": [
    "c = ExampleSix(10, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "uuid": "09c11cdf-8a11-44fc-bfa6-ab7d0e5fb1f0"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "uuid": "3d48c537-1b7e-47ca-8265-7ec6d22ccdbb"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "150"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.multiplication()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "uuid": "8ba30bf1-927d-4f0f-bdff-e52902611f47"
   },
   "outputs": [],
   "source": [
    "class ExampleSeven(object):\n",
    "    def __init__(self, a, b):\n",
    "        self.a = a\n",
    "        self.b = b\n",
    "        self.__sum = a + b\n",
    "    multiplication = multiplication\n",
    "    def addition(self):\n",
    "        return self.__sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "uuid": "5789b7e3-eada-4855-a8e7-835d05841f09"
   },
   "outputs": [],
   "source": [
    "c = ExampleSeven(10, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "uuid": "cffc73ff-1abd-48d7-8d31-110c5688c8cc"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "uuid": "4d52d700-8969-4461-84f1-024629dc249a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c._ExampleSeven__sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "uuid": "351770f1-1e91-4d2f-9069-07a828a7b912"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.a += 10\n",
    "c.a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "uuid": "afae2e94-1ff5-4e7e-a17d-a178a4b2db4f"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.addition()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "uuid": "facaf795-8f14-438c-ac4b-50182c55968f"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c._ExampleSeven__sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "uuid": "0cf66833-d07e-413a-938a-c6f0f8add274"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "300"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c.multiplication()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "uuid": "4ac60abf-3801-4c85-9a70-5225c067802e"
   },
   "outputs": [],
   "source": [
    "name_list = ['Sandra', 'Lilli', 'Guido', 'Zorro', 'Henry']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "uuid": "7a94a261-2baf-4ab4-9f76-8de755e2dde3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sandra\n",
      "Lilli\n",
      "Guido\n",
      "Zorro\n",
      "Henry\n"
     ]
    }
   ],
   "source": [
    "for name in name_list:\n",
    "    print(name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simple Short Rate Class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "uuid": "d6fcc0d8-6c79-4a31-8e48-78a38311e688"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "def discount_factor(r, t):\n",
    "    ''' Function to calculate a discount factor.\n",
    "    \n",
    "    Parameters\n",
    "    ==========\n",
    "    r : float\n",
    "        positive, constant short rate\n",
    "    t : float, array of floats\n",
    "        future date(s), in fraction of years;\n",
    "        e.g. 0.5 means half a year from now\n",
    "    \n",
    "    Returns\n",
    "    =======\n",
    "    df : float\n",
    "        discount factor\n",
    "    '''\n",
    "    df = np.exp(-r * t)\n",
    "      # use of NumPy universal function for vectorization\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "uuid": "8d7ae797-3070-4e98-a516-7c03d219885e"
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "uuid": "8febc46f-9d54-4ac9-b4a2-b7b20afd6657"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x104895898>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x104895978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = np.linspace(0, 5)\n",
    "for r in [0.01, 0.05, 0.1]:\n",
    "    plt.plot(t, discount_factor(r, t), label='r=%4.2f' % r, lw=1.5)\n",
    "plt.xlabel('years')\n",
    "plt.ylabel('discount factor')\n",
    "plt.grid(True)\n",
    "plt.legend(loc=0)\n",
    "# tag: disc_fact_1\n",
    "# title: Discount factors for different short rates over 5 years"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "uuid": "849b995a-8873-4a42-94c3-c638799d03e2"
   },
   "outputs": [],
   "source": [
    "class short_rate(object):\n",
    "    ''' Class to model a constant short rate object.\n",
    "    \n",
    "    Parameters\n",
    "    ==========\n",
    "    name : string\n",
    "        name of the object\n",
    "    rate : float\n",
    "        positive, constant short rate\n",
    "    \n",
    "    Methods\n",
    "    =======\n",
    "    get_discount_factors :\n",
    "        returns discount factors for given list/array\n",
    "        of dates/times (as year fractions)\n",
    "    '''\n",
    "    def __init__(self, name, rate):\n",
    "        self.name = name\n",
    "        self.rate = rate\n",
    "    def get_discount_factors(self, time_list):\n",
    "        ''' time_list : list/array-like '''\n",
    "        time_list = np.array(time_list)\n",
    "        return np.exp(-self.rate * time_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "uuid": "00abadb7-63af-4da6-a4f6-d80cc6ac1f75"
   },
   "outputs": [],
   "source": [
    "sr = short_rate('r', 0.05)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "uuid": "cb409ce7-30f9-4937-9ac9-85089ca4679f"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('r', 0.05)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sr.name, sr.rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "uuid": "3ac0270c-9950-437c-bb46-65d1cbddf283"
   },
   "outputs": [],
   "source": [
    "time_list = [0.0, 0.5, 1.0, 1.25, 1.75, 2.0]  # in year fractions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "uuid": "cab9697b-e048-4452-bfb8-1090bb48c293"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.        ,  0.97530991,  0.95122942,  0.93941306,  0.91621887,\n",
       "        0.90483742])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sr.get_discount_factors(time_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "uuid": "0ddbd6e4-8fd9-43e0-a256-5d1b880d3a05"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x10cdfc080>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10cddbb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for r in [0.025, 0.05, 0.1, 0.15]:\n",
    "    sr.rate = r\n",
    "    plt.plot(t, sr.get_discount_factors(t),\n",
    "             label='r=%4.2f' % sr.rate, lw=1.5)\n",
    "plt.xlabel('years')\n",
    "plt.ylabel('discount factor')\n",
    "plt.grid(True)\n",
    "plt.legend(loc=0)\n",
    "# tag: disc_fact_2\n",
    "# title: Discount factors for different short rates over 5 years"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "uuid": "2acc982a-71a8-4505-bb98-61eb4c85d6b0"
   },
   "outputs": [],
   "source": [
    "sr.rate = 0.05\n",
    "cash_flows = np.array([-100, 50, 75])\n",
    "time_list = [0.0, 1.0, 2.0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "uuid": "1d1c180e-b8d2-41f9-9faf-55dd004a3606"
   },
   "outputs": [],
   "source": [
    "disc_facts = sr.get_discount_factors(time_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "uuid": "24992872-9aab-47dd-9c39-f8465e9f21fd"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.        ,  0.95122942,  0.90483742])"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "disc_facts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "uuid": "95fed5fe-b198-4790-9ba2-9219ce2d0510"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-100.        ,   47.56147123,   67.86280635])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# present values\n",
    "disc_facts * cash_flows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "uuid": "22d67111-86c5-438b-ac7f-2d746848ee5a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "15.424277577732667"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# net present value\n",
    "np.sum(disc_facts * cash_flows)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "uuid": "25b83999-44c9-4d70-84ea-5ecbca23ade7"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1.4032346276182679"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sr.rate = 0.15\n",
    "np.sum(sr.get_discount_factors(time_list) * cash_flows)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Cash Flow Series Class"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "uuid": "27fec9d5-6849-4ef0-bd69-545e141eb888"
   },
   "outputs": [],
   "source": [
    "class cash_flow_series(object):\n",
    "    ''' Class to model a cash flows series.\n",
    "    \n",
    "    Attributes\n",
    "    ==========\n",
    "    name : string\n",
    "        name of the object\n",
    "    time_list : list/array-like\n",
    "        list of (positive) year fractions\n",
    "    cash_flows : list/array-like\n",
    "        corresponding list of cash flow values\n",
    "    short_rate : instance of short_rate class\n",
    "        short rate object used for discounting\n",
    "    \n",
    "    Methods\n",
    "    =======\n",
    "    present_value_list :\n",
    "        returns an array with present values\n",
    "    net_present_value :\n",
    "        returns NPV for cash flow series\n",
    "    '''\n",
    "    def __init__(self, name, time_list, cash_flows, short_rate):\n",
    "        self.name = name\n",
    "        self.time_list = time_list\n",
    "        self.cash_flows = cash_flows\n",
    "        self.short_rate = short_rate\n",
    "    def present_value_list(self):\n",
    "        df = self.short_rate.get_discount_factors(self.time_list)\n",
    "        return np.array(self.cash_flows) * df\n",
    "    def net_present_value(self):\n",
    "        return np.sum(self.present_value_list())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "uuid": "50136851-d7f8-467a-a04b-4b88bc6dc630"
   },
   "outputs": [],
   "source": [
    "sr.rate = 0.05\n",
    "cfs = cash_flow_series('cfs', time_list, cash_flows, sr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "uuid": "f6245d43-7dde-44b4-9b35-40eea1c6af66"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-100,   50,   75])"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cfs.cash_flows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "uuid": "04da2bcd-a388-4830-a152-8ab6cd958e68"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.0, 1.0, 2.0]"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cfs.time_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "uuid": "7de29949-494c-4156-bbc9-4165cdb87e47"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-100.        ,   47.56147123,   67.86280635])"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cfs.present_value_list()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "uuid": "a7822201-d6b3-4715-9911-de550887f5e3"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "15.424277577732667"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cfs.net_present_value()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "uuid": "94f0003a-b9f3-4c92-b814-e0a6e6f9977c"
   },
   "outputs": [],
   "source": [
    "class cfs_sensitivity(cash_flow_series):\n",
    "    def npv_sensitivity(self, short_rates):\n",
    "        npvs = []\n",
    "        for rate in short_rates:\n",
    "            sr.rate = rate\n",
    "            npvs.append(self.net_present_value())\n",
    "        return np.array(npvs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "uuid": "523386c6-0394-40f2-88af-6dcc23b1f742"
   },
   "outputs": [],
   "source": [
    "cfs_sens = cfs_sensitivity('cfs', time_list, cash_flows, sr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "uuid": "743dbb63-8728-49d5-83b0-f2213c37c4f8"
   },
   "outputs": [],
   "source": [
    "short_rates = [0.01, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "uuid": "bbb146fa-1f7a-459b-b89e-8baad84eda8a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 23.01739219,  20.10770244,  15.42427758,  10.94027255,\n",
       "         6.64667738,   2.53490386,  -1.40323463,  -8.78945889])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "npvs = cfs_sens.npv_sensitivity(short_rates)\n",
    "npvs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "uuid": "e96a2807-b45d-4c02-b5b6-6ca80026f340"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'net present value')"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10cf1d278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(short_rates, npvs, 'b')\n",
    "plt.plot(short_rates, npvs, 'ro')\n",
    "plt.plot((0, max(short_rates)), (0, 0), 'r', lw=2)\n",
    "plt.grid(True)\n",
    "plt.xlabel('short rate')\n",
    "plt.ylabel('net present value')\n",
    "# tag: net_present_values\n",
    "# title: Net present values of cash flow list for different short rates"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Further Reading"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "<a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:training@tpq.io\">training@tpq.io</a>\n",
    "\n",
    "**Quant Platform** |\n",
    "<a href=\"http://quant-platform.com\">http://quant-platform.com</a>\n",
    "\n",
    "**Python for Finance** |\n",
    "<a href=\"http://python-for-finance.com\" target=\"_blank\">Python for Finance @ O'Reilly</a>\n",
    "\n",
    "**Derivatives Analytics with Python** |\n",
    "<a href=\"http://derivatives-analytics-with-python.com\" target=\"_blank\">Derivatives Analytics @ Wiley Finance</a>\n",
    "\n",
    "**Listed Volatility and Variance Derivatives** |\n",
    "<a href=\"http://lvvd.tpq.io\" target=\"_blank\">Listed VV Derivatives @ Wiley Finance</a>\n",
    "\n",
    "**Python Training** |\n",
    "<a href=\"http://training.tpq.io\" target=\"_blank\">Python for Finance University Certificate</a>"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
